from django.db import models
from django.utils import timezone


# Create your models here.
# 模型(model)：定义数据库相关的内容，一般放在models.py文件中。

# http://www.cnblogs.com/zknublx/p/5944779.html
# https://blog.csdn.net/gavinking0110/article/details/54412590
# Django中model的字段类型

# https://blog.csdn.net/lianghx001/article/details/24350567
# https://blog.csdn.net/weixin_37773766/article/details/80330221
# models常用的Field
'''表字段
1、models.AutoField　　自增列 = int(11)
　　如果没有的话，默认会生成一个名称为 id 的列，如果要显示的自定义一个自增列，必须将给列设置为主键 primary_key=True。
2、models.CharField　　字符串字段
　　必须 max_length 参数
3、models.BooleanField　　布尔类型=tinyint(1)
　　不能为空，Blank=True
4、models.ComaSeparatedIntegerField　　用逗号分割的数字=varchar
　　继承CharField，所以必须 max_lenght 参数
5、models.DateField　　日期类型 date
　　对于参数，auto_now = True 则每次更新都会更新这个时间；auto_now_add 则只是第一次创建添加，之后的更新不再改变。
6、models.DateTimeField　　日期类型 datetime
　　同DateField的参数
7、models.DecimalField　　十进制小数类型 = decimal
　　必须指定整数位max_digits和小数位decimal_places
8、models.EmailField　　字符串类型（正则表达式邮箱） =varchar
　　对字符串进行正则表达式
9、models.FloatField　　浮点类型 = double
10、models.IntegerField　　整形
11、models.BigIntegerField　　长整形
　　integer_field_ranges = {
　　　　'SmallIntegerField': (-32768, 32767),
　　　　'IntegerField': (-2147483648, 2147483647),
　　　　'BigIntegerField': (-9223372036854775808, 9223372036854775807),
　　　　'PositiveSmallIntegerField': (0, 32767),
　　　　'PositiveIntegerField': (0, 2147483647),
　　}
12、models.IPAddressField　　字符串类型（ip4正则表达式）
13、models.GenericIPAddressField　　字符串类型（ip4和ip6是可选的）
　　参数protocol可以是：both、ipv4、ipv6
　　验证时，会根据设置报错
14、models.NullBooleanField　　允许为空的布尔类型
15、models.PositiveIntegerField　　正Integer
16、models.PositiveSmallIntegerField　　正smallInteger
17、models.SlugField　　减号、下划线、字母、数字
18、models.SmallIntegerField　　数字
　　数据库中的字段有：tinyint、smallint、int、bigint
19、models.TextField　　字符串=longtext
20、models.TimeField　　时间 HH:MM[:ss[.uuuuuu]]
21、models.URLField　　字符串，地址正则表达式
22、models.BinaryField　　二进制
23、models.ImageField   图片
24、models.FilePathField 文件
'''

'''表字段参数
1、null=True
　　数据库中字段是否可以为空
2、blank=True（不能为空）
　　django的 Admin 中添加数据时是否可允许空值
3、primary_key = False
　　主键，对AutoField设置主键后，就会代替原来的自增 id 列
4、auto_now 和 auto_now_add
　　auto_now   自动创建---无论添加或修改，都是当前操作的时间
　　auto_now_add  自动创建---永远是创建时的时间
5、choices
GENDER_CHOICE = (
        (u'M', u'Male'),
        (u'F', u'Female'),
    )
gender = models.CharField(max_length=2,choices = GENDER_CHOICE)
6、max_length
7、default　　默认值
8、verbose_name　　Admin中字段的显示名称
9、name|db_column　　数据库中的字段名称
10、unique=True　　不允许重复
11、db_index = True　　数据库索引
12、editable=True　　在Admin里是否可编辑
13、error_messages=None　　错误提示
14、auto_created=False　　自动创建
15、help_text　　在Admin中提示帮助信息
16、validators=[]
17、upload-to   上传到哪个位置,更多与image,filepath配合使用
'''


'''连表结构
一对多:models.ForeignKey(其他表)
多对多:models.ManyToManyField(其他表)
一对一:models.ManyToManyField(其他表)

应用场景:
一对多：当一张表中创建一行数据时，有一个单选的下拉框（可以被重复选择）
        例如：创建用户信息时候，需要选择一个用户类型【普通用户】【金牌用户】【铂金用户】等。
多对多：在某表中创建一行数据是，有一个可以多选的下拉框
        例如：创建用户信息，需要为用户指定多个爱好
一对一：在某表中创建一行数据时，有一个单选的下拉框（下拉框中的内容被用过一次就消失了
        例如：原有含10列数据的一张表保存相关信息，经过一段时间之后，10列无法满足需求，需要为原来的表再添加5列数据
'''


# 用户信息
class UserInfo(models.Model):
    user_id = models.AutoField(verbose_name='用户编号', max_length=32, primary_key=True)
    password  = models.CharField(verbose_name='用户密码', max_length=32, default='123456')
    user_name = models.CharField(verbose_name='用户名称', max_length=32, null=True)

    gendle = models.BooleanField(verbose_name='性别', max_length=1, default=False)
    age = models.PositiveSmallIntegerField(verbose_name='年龄', default=0)
    weigth = models.FloatField(verbose_name='体重', default=0)
    heigth = models.IntegerField(verbose_name='身高', default=0)
    birthday = models.DateField(verbose_name='出生日期', max_length=10, null=True)

    address = models.CharField(verbose_name='用户地址', max_length=128, null=True)
    telephone = models.CharField(verbose_name='手机号码', max_length=11, null=True, unique=True)
    email = models.EmailField(verbose_name='邮箱地址', max_length=32, null=True)
    ip = models.GenericIPAddressField(verbose_name='IP地址', max_length=40, default='127.0.0.1')
    MAC = models.SlugField(verbose_name='MAC地址', max_length=18, default='00-00-00-00-00-00')

    open_date = models.DateField(verbose_name='开户日期', max_length=10, auto_now_add=True)
    open_time = models.TimeField(verbose_name='开户时间', max_length=10, auto_now_add=True)
    timestamp = models.DateTimeField(verbose_name='时间戳', max_length=20, auto_now=True)
    user_status = models.CharField(verbose_name='用户状态', max_length=1, default='1')
    group_id = models.PositiveIntegerField(verbose_name='分组编号', default='0')
    group_name = models.CharField(verbose_name='分组名称', max_length=32, null=True)
    salary = models.DecimalField(verbose_name='薪资', max_digits=10, decimal_places=2, default=0)
    blog = models.URLField(verbose_name='博客地址', max_length=200, null=True)
    photo = models.ImageField(verbose_name='照片', null=True)
    resume = models.FileField(verbose_name='简历名称', null=True)
    resume_path = models.FilePathField(verbose_name='简历路径', null=True)
    remark = models.TextField(verbose_name='备注', max_length=128, null=True)
